﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace BanVeXemPhim_Presentation
{
    public class PhimDAO:DataProvider
    {
        public bool KiemTraTenPhim(string tenPhim)
        {
            connect();
            bool isExisting = false;
            string query = "select TenPhim from phim where TenPhim = N'" + tenPhim + "'";
            object obj = executeScalar(query);
            if (obj != null)
            {
                isExisting = true;
            }
            return isExisting;
        }
        public PhimDTO[] LayDanhSachPhim()
        {
            connect();
            string query = "select * " +
                            "from phim ";                           
            adapter = new SqlDataAdapter(query, connection);
            DataSet dataset = new DataSet();
            adapter.Fill(dataset);
            DataTable dataTable = dataset.Tables[0];
            int n = dataTable.Rows.Count;
            PhimDTO[] dsPhim = new PhimDTO[n];
            for (int i = 0; i < n; i++)
            {
                object phim = GetDataFromDataRow(dataTable, i);
                dsPhim[i] = (PhimDTO)phim;
            }
            return dsPhim;
        }
        public PhimDTO[] DanhSachPhimChieuTrongTuan()
        {
            connect();
            string query = "select * " +
                            "from phim " +
                            "where idphim in (" +
                            "select xuatchieu.phim " +
                            "from  lichchieutuan,xuatchieu " +
                            "where getdate() between lichchieutuan.ngaybatdau and lichchieutuan.ngayketthuc and lichchieutuan.idtuan=xuatchieu.idtuan)";
            adapter=new SqlDataAdapter(query,connection);
            DataSet dataset=new DataSet();
            adapter.Fill(dataset);
            DataTable dataTable = dataset.Tables[0];
            int n = dataTable.Rows.Count;
            PhimDTO[] dsPhim = new PhimDTO[n];
            for (int i = 0; i < n; i++)
            {
                object phim = GetDataFromDataRow(dataTable, i);
                dsPhim[i] = (PhimDTO)phim;
            }
            return dsPhim;
        }
        public PhimDTO[] DanhSachPhimTuanCuoiCungXepLich()
        {
            PhimDTO[] dsPhim=new PhimDTO[3];
            return dsPhim;
        }
        protected override object GetDataFromDataRow(DataTable dt, int i)
        {
            PhimDTO phim = new PhimDTO();
            phim.IdPhim = Convert.ToInt32(dt.Rows[i]["Idphim"].ToString());
            phim.TenPhim = dt.Rows[i]["TenPhim"].ToString();
            if (dt.Rows[i]["TheLoai"].ToString()!="")
            {
                phim.TheLoai = int.Parse(dt.Rows[i]["TheLoai"].ToString());
            }
            else
            {
                phim.TheLoai = -1;
            }
            phim.DaoDien = dt.Rows[i]["DaoDien"].ToString();
            if (dt.Rows[i]["DoDai"].ToString()!="")
            {
                phim.DoDai = int.Parse(dt.Rows[i]["DoDai"].ToString());
            }
            
            phim.Hang = dt.Rows[i]["Hang"].ToString();
            phim.NuocSanXuat = dt.Rows[i]["NuocSanXuat"].ToString();
            phim.NgayKhoiChieu = Convert.ToDateTime(dt.Rows[i]["NgayKhoiChieu"]);
            phim.NgayKetThuc = Convert.ToDateTime(dt.Rows[i]["NgayKetThuc"].ToString());
            if (dt.Rows[i]["Hinh"] is System.DBNull)
            {
              
            }
            else
            {
                phim.DataHinh = (byte[]) dt.Rows[i]["Hinh"];
            }
            return phim;
        }
        public PhimDTO[] DanhSachPhimTuanCuoiCung()
        {
            connect();
            string query = "select * " +
                            "from phim " +
                            "where idphim in (" +
                            "select xuatchieu.phim " +
                            "from  lichchieutuan,xuatchieu " +
                            "where lichchieutuan.idtuan=xuatchieu.idtuan and lichchieutuan.idtuan>=all(select idtuan from LichChieuTuan))";
            adapter = new SqlDataAdapter(query, connection);
            DataSet dataset = new DataSet();
            adapter.Fill(dataset);
            DataTable dataTable = dataset.Tables[0];
            int n = dataTable.Rows.Count;
            PhimDTO[] dsPhim = new PhimDTO[n];
            for (int i = 0; i < n; i++)
            {
                object phim = GetDataFromDataRow(dataTable, i);
                dsPhim[i] = (PhimDTO)phim;
            }
            return dsPhim;
        }
        public void ThemPhim(PhimDTO phimDto)
        {
            connect();
            string query = "insert into Phim(TenPhim,TheLoai,DaoDien,DoDai,Hang,NuocSanXuat,NgayKhoiChieu,NgayKetThuc) values(N'" + phimDto.TenPhim + "',"
                + phimDto.TheLoai + ",N'"
                + phimDto.DaoDien + "',"
                + phimDto.DoDai + ",N'"
                + phimDto.Hang + "',N'"
                + phimDto.NuocSanXuat + "',convert(datetime,'"
                + phimDto.NgayKhoiChieu.ToShortDateString() + "',103),convert(datetime,'"
                + phimDto.NgayKetThuc.ToShortDateString() + "',103))";
            executeNonQuery(query);
        }
        public void XoaPhim(PhimDTO phimDto)
        {
            connect();
            string query = "delete from phim where TenPhim= N'" + phimDto.TenPhim + "'";
            command = connection.CreateCommand();
            command.CommandText = query;
            command.ExecuteNonQuery();
        }
        public void CapNhatPhim(PhimDTO phimDto)
        {
            connect();
            command = this.connection.CreateCommand();
            string query;
            SqlParameter parameter;

            if(phimDto.TheLoai!=-1 )
            {

                if(phimDto.DataHinh!=null)
                {
                    query = "update phim set TenPhim=@tenphim,TheLoai=@theloai,DaoDien=@daodien,DoDai=@dodai,Hang=@hang,NuocSanXuat=@nuocsanxuat,NgayKhoiChieu=@ngaykhoichieu,NgayKetThuc=@ngayketthuc,hinh=@datahinh  where TenPhim=@tp";
                    command.CommandText = query;
                    parameter = command.Parameters.Add("@datahinh", SqlDbType.Image);
                    parameter.Value = phimDto.DataHinh;
                }
                else
                {
                    query = "update phim set TenPhim=@tenphim,TheLoai=@theloai,DaoDien=@daodien,DoDai=@dodai,Hang=@hang,NuocSanXuat=@nuocsanxuat,NgayKhoiChieu=@ngaykhoichieu,NgayKetThuc=@ngayketthuc  where TenPhim=@tp";
                    command.CommandText = query;
                }

                parameter= command.Parameters.Add("@tenphim", SqlDbType.NVarChar);
                parameter.Value = phimDto.TenPhim;

                parameter = command.Parameters.Add("@theloai", SqlDbType.Int);
                parameter.Value = phimDto.TheLoai;

                parameter = command.Parameters.Add("@daodien", SqlDbType.NVarChar);
                parameter.Value = phimDto.DaoDien;

                parameter = command.Parameters.Add("@dodai", SqlDbType.Int);
                parameter.Value = phimDto.DoDai;

                parameter = command.Parameters.Add("@hang", SqlDbType.NVarChar);
                parameter.Value = phimDto.Hang;

                parameter = command.Parameters.Add("@nuocsanxuat", SqlDbType.NVarChar);
                parameter.Value = phimDto.NuocSanXuat;

                parameter = command.Parameters.Add("@ngaykhoichieu", SqlDbType.DateTime);
                parameter.Value = phimDto.NgayKhoiChieu;

                parameter = command.Parameters.Add("@ngayketthuc", SqlDbType.DateTime);
                parameter.Value = phimDto.NgayKetThuc;

                parameter = command.Parameters.Add("@tp", SqlDbType.NVarChar);
                parameter.Value = phimDto.TenPhim;
            }
            else             
            {
                if(phimDto.DataHinh!=null)
                {
                    query = "update phim set TenPhim=@tenphim,DaoDien=@daodien,DoDai=@dodai,Hang=@hang,NuocSanXuat=@nuocsanxuat,NgayKhoiChieu=@ngaykhoichieu,NgayKetThuc=@ngayketthuc,hinh=@datahinh  where TenPhim=@tp";
                    command.CommandText = query;
                    parameter = command.Parameters.Add("@datahinh", SqlDbType.Image);
                    parameter.Value = phimDto.DataHinh;
                }
                else
                {
                    query = "update phim set TenPhim=@tenphim,DaoDien=@daodien,DoDai=@dodai,Hang=@hang,NuocSanXuat=@nuocsanxuat,NgayKhoiChieu=@ngaykhoichieu,NgayKetThuc=@ngayketthuc  where TenPhim=@tp";
                    command.CommandText = query;
                }


                parameter = command.Parameters.Add("@tenphim", SqlDbType.NVarChar);
                parameter.Value = phimDto.TenPhim;

                parameter = command.Parameters.Add("@daodien", SqlDbType.NVarChar);
                parameter.Value = phimDto.DaoDien;

                parameter = command.Parameters.Add("@dodai", SqlDbType.Int);
                parameter.Value = phimDto.DoDai;

                parameter = command.Parameters.Add("@hang", SqlDbType.NVarChar);
                parameter.Value = phimDto.Hang;

                parameter = command.Parameters.Add("@nuocsanxuat", SqlDbType.NVarChar);
                parameter.Value = phimDto.NuocSanXuat;

                parameter = command.Parameters.Add("@ngaykhoichieu", SqlDbType.DateTime);
                parameter.Value = phimDto.NgayKhoiChieu;

                parameter = command.Parameters.Add("@ngayketthuc", SqlDbType.DateTime);
                parameter.Value = phimDto.NgayKetThuc;

                parameter = command.Parameters.Add("@tp", SqlDbType.NVarChar);
                parameter.Value = phimDto.TenPhim;
            }


            this.command.ExecuteNonQuery();
        }
    }
}
